package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblPaises;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblPaqueteRegional;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetAsignarPaquetesRegionalForm;
import com.mastercard.assets.web.util.to.PaqueteRegionalTo;
import com.mastercard.assets.web.util.to.UserLogin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class AssetsAsignacionPaquetesRegionalPreparacion
        extends
                Action
{
    
    public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
            
            HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		int roleId = user.getActualRoleId( ) ;
                
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
                
                try {
                    AssetAsignarPaquetesRegionalForm f = new AssetAsignarPaquetesRegionalForm( ) ;
                    
                    int paquetes = 0 , asignados = 0 , disponibles = 0,
                            Stotales = 0, Sdisponibles = 0, Sasignados = 0,
                            Dtotales = 0, Ddisponibles = 0, Dasignados = 0 ;
                    
                    TblAsset asset = ( TblAsset ) request.getAttribute( "ItemFinded" ) ;
                    f.setTblAsset( asset ) ;
                    f.setCveAsset( asset.getCveAsset( ) ) ;
                    
                    List< TblPaqueteRegional > lpr = MasterCardDAO.getAllPackagesRegionalOfAsset( f.getTblAsset( ).getCveAsset( ) , 1 ) ;
                    List< TblPaises > lp = MasterCardDAO.getPaisesExceptoUno( ) ;
                    f.setTblPaises( lp ) ;
                                        
                    int[] cvePais = new int[lpr.size()] ;
                    String[] nombrePais = new String[lpr.size()] ;
                    int[] paquetesAsignadosS = new int[lpr.size()] ;
                    int[] paquetesAsignadosD = new int[lpr.size()] ;
//                    int[] manejarPaquetes = new int[lpr.size()] ;
                    
                    int[] cvePaisSF = new int[lp.size()] ;
                    String[] nombrePaisSF = new String[lp.size()] ;
                    int[] paquetesAsignadosSF = new int[lp.size()] ;                    
                    int[] manejarPaquetesSF = new int[lp.size()] ;
                    
                    int[] cvePaisDF = new int[lp.size()] ;
                    String[] nombrePaisDF = new String[lp.size()] ;
                    int[] paquetesAsignadosDF = new int[lp.size()] ;
                    int[] manejarPaquetesDF = new int[lp.size()] ;
                    
                    //RECORRE CADA PAQUETE REGIONAL DEL ASSET
                    for( TblPaqueteRegional pR : lpr ) {
                        // Conteo de paquetes totales del Asset
                        if( pR.getBandera( ) == 1 ) {
                            disponibles += 1 ; 
                        } else if ( pR.getBandera( ) == 2 ) {
                            asignados += 1 ;
                        }
                        TblPaquete paq = MasterCardDAO.getPackageWhitCveAndStatus( pR.getPaquete( ) ) ;
                        // Conteo por tipo de Habitación
                        if( pR.getHabitacion( ) == 1 ) {
                            // Cuenta total, asignados y disponibles
                            if( pR.getBandera( ) == 1 ) {
                                Sdisponibles += 1 ;
                            }else if( pR.getBandera( ) == 2 ) {
                                Sasignados += 1 ;
                                // LLENA EL paqueteRegionalTo                                 
//                                paqueteRegionalTo.setCvePais( paq.getTblAsset( ).getTblPais( ).getCvePais( ) ) ;
//                                paqueteRegionalTo.setNombrePais( paq.getTblAsset( ).getTblPais( ).getNombre( ) ) ;
//                                paqueteRegionalTo.setPaquetesAsignadosS( 1 ) ;                                
                                cvePais[paquetes] = paq.getTblAsset( ).getTblPais( ).getCvePais( ) ;
                                nombrePais[paquetes] = paq.getTblAsset( ).getTblPais( ).getNombre( ) ;
                                paquetesAsignadosS[paquetes] = 1 ;
                            }
                            Stotales += 1 ;
                            
                        } else if( pR.getHabitacion( ) == 2 ) {
                            // Cuenta total, asignados y disponibles
                            if( pR.getBandera( ) == 1 ) {
                                Ddisponibles += 1 ;
                            }else if( pR.getBandera( ) == 2 ) {
                                Dasignados += 1 ;
                                // LLENA EL paqueteRegionalTo                                 
//                                paqueteRegionalTo.setCvePais( paq.getTblAsset( ).getTblPais( ).getCvePais( ) ) ;
//                                paqueteRegionalTo.setNombrePais( paq.getTblAsset( ).getTblPais( ).getNombre( ) ) ;
//                                paqueteRegionalTo.setPaquetesAsignadosD( 1 ) ;                                
                                cvePais[paquetes] = paq.getTblAsset( ).getTblPais( ).getCvePais( ) ;
                                nombrePais[paquetes] = paq.getTblAsset( ).getTblPais( ).getNombre( ) ;
                                paquetesAsignadosD[paquetes] = 1 ;
                            }
                            Dtotales += 1 ;
                        }
//                        // AGREGA EL PaqueteRegionalTo A LA LISTA packsRegionalTo
//                        packsRegionalTo.add( paqueteRegionalTo ) ;
                        
                        paquetes += 1 ;
                        
                    }
                   
                    int cuenta = 0 ;
                    for( TblPaises pais : lp ) {
                        
                        cvePaisSF[cuenta] = pais.getCvePais() ; nombrePaisSF[cuenta] = pais.getNombre( ) ;
                        paquetesAsignadosSF[cuenta] = 0 ; manejarPaquetesSF[cuenta] = 0 ;
                        
                        cvePaisDF[cuenta] = pais.getCvePais() ; nombrePaisDF[cuenta] = pais.getNombre( ) ;
                        paquetesAsignadosDF[cuenta] = 0 ; manejarPaquetesDF[cuenta] = 0 ;
                        
                        for( int i = 0 ; i < cvePais.length ; i++ ) {
                            
                            if( pais.getCvePais( ) == cvePais[i] ) {
                                
                                if( paquetesAsignadosS[i] == 1 ) {
                                    paquetesAsignadosSF[cuenta] += 1 ;
                                }else
                                    if( paquetesAsignadosD[i] == 1 ) {
                                        paquetesAsignadosDF[cuenta] += 1 ;
                                    }                                
                            }
                        }
                        cuenta ++ ;
                    }
                    
                    f.setCvePaisS( cvePaisSF ) ;
                    f.setNombrePaisS( nombrePaisSF ) ;
                    f.setPaquetesAsignadosS( paquetesAsignadosSF ) ;                    
                    f.setManejarPaquetesS( manejarPaquetesSF ) ;
                    f.setCvePaisD( cvePaisDF ) ;
                    f.setNombrePaisD( nombrePaisDF ) ;
                    f.setPaquetesAsignadosD( paquetesAsignadosDF ) ;
                    f.setManejarPaquetesD( manejarPaquetesDF ) ;
                    
                    request.setAttribute( "AssetAsignarPaquetesRegionalForm" , f ) ;
                    request.setAttribute( "UserLogin" , user ) ;
                    request.setAttribute( "paquetes" , paquetes ) ;
                    request.setAttribute( "asignados" , asignados ) ;
                    request.setAttribute( "disponibles" , disponibles ) ;
                    request.setAttribute( "Stotales" , Stotales ) ;
                    request.setAttribute( "Sdisponibles" , Sdisponibles ) ;
                    request.setAttribute( "Sasignados" , Sasignados ) ;
                    request.setAttribute( "Dtotales" , Dtotales ) ;
                    request.setAttribute( "Ddisponibles" , Ddisponibles ) ;
                    request.setAttribute( "Dasignados" , Dasignados ) ;
                    
                }catch( Exception e )
		{
                    MasterCardDAO.closeEntityManager( ) ;
			e.printStackTrace( ) ;
			user.setMessageError( e.getMessage( ) ) ;
		}
                
                user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioRegional.jsp" ) ;
		
                MasterCardDAO.closeEntityManager( ) ;
	  	return mapping.findForward( "success" ) ;
            
        }
    
}
